\section{Nombre}

\texttt{Bench::Test::View}

Formatea tablas de datos

\section{Sinopsis}

\begin{verbatim}
   my $view = Bench::Test::View->new(
      format => 'html',
      verbose => 1,
   );
\end{verbatim}
\begin{verbatim}
   my $row = [1, 2, 33];
\end{verbatim}
\begin{verbatim}
   $view->add_row($row);
\end{verbatim}
\begin{verbatim}
   my $output = $view->process;
\end{verbatim}

\section{Descripción}

El objeto \texttt{Bench::Test::View} permite formatear una tabla de
datos cualesquiera en los siguientes formatos: HTML, XML, LaTex,
texto plano o cualquier otro formato que el usuario defina utilizando
Template Toolkit.

\subsection{Un ejemplo}

Supongamos una tabla de datos como la siguiente:

\begin{verbatim}
  $data = [ [1, 2, 3], [4, 66, 7], ['yes', 1000, 'OK'] ];
\end{verbatim}

El siguiente código introduce las filas una a una y devuelve
la salida formateada en los distintos formatos disponibles.

\begin{verbatim}
  my $view = Bench::Test::View->new;
  for my $row (@{$data}) {
     $view->add_row($row);
  }
\end{verbatim}
\begin{verbatim}
  my $output_HTML  = $view->process('html');
  my $output_XML   = $view->process('xml');
  my $output_LaTex = $view->process('latex');
  my $output_text  = $view->process('text');
  my $output_user  = $view->process('file:template.tt');
\end{verbatim}
\begin{verbatim}
  print $output_text;
\end{verbatim}

La ejecución del anterior fragmento de código mostraría lo siguiente:

\begin{verbatim}
  1   2    3
  4   66   7
  yes 1000 OK
\end{verbatim}

Y además almacenaría en las diferentes variables la misma
tabla formateada con todos los formatos disponibles.

\section{Métodos}
\subsection{El constructor \texttt{new}}

El constructor acepta los siguientes parámetros:

\begin{description}

\item[{\texttt{format}}] \mbox{}

(Opcional) Formato en el que se desea la salida
formateada. Puede indicarse en el constructor o
mediante el método 'set\_format'.

\item[{\texttt{verbose}}] \mbox{}

(Opcional) Por defecto está activado. Imprime por
\texttt{stdout} las filas de datos que se van incluyendo.
Los elementos de las filas son mostrados sin formato,
solamente separados por un tabulador.

\end{description}

\subsection{El método \texttt{set\_format}}

El método \texttt{set\_format} recibe una cadena de 
caracteres que indica
el formato que se desea utilizar para formatear
la salida con el método \texttt{process}.

Los formatos pueden ser \texttt{html}, \texttt{xml}, \texttt{latex} y \texttt{text}.

\subsection{El método \texttt{add\_row}}

El método \texttt{add\_row} recibe una referencia a array conteniendo
una nueva fila de datos y la guarda en orden para ser mostrada
posteriormente con el método \texttt{process}

\subsection{El método \texttt{process}}

El método \texttt{process} devuelve la salida formateada con el formato
indicado en el atributo \texttt{FORMAT}. Puede recibir el formato como
parámetro si este no esta definido o si se desea cambiar
en el instante de la llamada.

\section{Formatos}

Existen cuatro formatos cuyas plantillas \textit{Template Toolkits} permanecen
almacenadas en las clases correspondientes:

\begin{itemize}
\item \texttt{html~~} en  \texttt{Bench::Test::View::HTML};
\item \texttt{xml~~~} en  \texttt{Bench::Test::View::XML};
\item \texttt{latex~} en  \texttt{Bench::Test::View::Latex};
\item \texttt{text~~} en  \texttt{Bench::Test::View::Text};
\end{itemize}

Además, se deja la posibilidad de que el usuario personalice
una plantilla y la utilice con la clase \texttt{Bench::Test::View} para
formatear sus datos. El parámetro \texttt{format} del constructor o
del método \texttt{set\_format} ha de ser el siguiente:

\begin{verbatim}
  'file:plantilla.tt'
\end{verbatim}

En el archivo \texttt{plantilla.tt} se encontrará la plantilla Template
Toolkit que formateará los datos. Se debe tener en cuenta lo
siguiente:

\begin{itemize}

\item 

Puede hacerse uso de la cláusula [\% PERL \%]


\item 

Los datos se encuentran en la variable \texttt{data} dentro
de la tabla de símbolos de Template Toolkit.

\end{itemize}


Véase un ejemplo de plantilla:

\begin{verbatim}
  <table>
  [% FOREACH row IN data -%]
   <tr>
      [% FOREACH item IN row -%]<td>$item</td>[%- END %]
   </tr>
  [% END -%]
  </table>
\end{verbatim}

\section{Véase también}

Para una mejor comprensión del módulo \texttt{Bench::Test::View},
véase también la documentación de los siguientes módulos:

\begin{itemize}
\item \texttt{Bench::Test}
\item \texttt{Template}
\end{itemize}
